# 位置调整函数（如 position_nudge()）首次可以声明自己的美学参数（aesthetics）。
# 你可以在 aes()内部通过映射数据来动态控制位置调整的参数，而不再仅限于使用静态的数值参数。

coal <- tibble::tribble(
  ~continent      , ~pct_1985 , ~pct_2024 ,
  "Africa"        , 53.87     , 24.68     ,
  "Asia"          , 32.60     , 51.19     ,
  "Europe"        , 32.84     , 12.91     ,
  "North America" , 48.93     , 13.79     ,
  "South America" ,  2.91     ,  3.31     ,
  "Oceania"       , 58.75     , 39.26
) |>
  dplyr::mutate(pp_difference = pct_2024 - pct_1985)

ggplot(coal, aes(pp_difference, continent)) +
  geom_col() +
  geom_text(aes(nudge_x = sign(pp_difference) * 3, label = pp_difference)) +
  labs(x = "Change in electricity generated by coal (pp)")

sports <- c("water polo", "swimming", "gymnastics", "field", "netball")
p <- ggridges::Aus_athletes |>
  dplyr::filter(sport %in% sports) |>
  ggplot(aes(x = height, y = sport, fill = sex)) +
  # 当某个运动项目下只有单一性别的数据时
  # （例如水球可能只有男性运动员，无板篮球只有女性运动员），
  # 其对应的箱线图宽度不会异常变宽，而是与其他包含两种性别的箱线图保持一致，
  # 从而维持图形的美观和一致性
  geom_boxplot(position = position_dodge(preserve = "single"))
p
p + aes(order = sex)

